#!/bin/bash

# 艺术画廊项目部署脚本
# 用于部署云函数、静态网站和数据库索引

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 检查CloudBase CLI是否安装
if ! command -v tcb &> /dev/null; then
    echo -e "${RED}错误: CloudBase CLI未安装${NC}"
    echo "请先安装CloudBase CLI: npm install -g @cloudbase/cli"
    exit 1
fi

# 检查是否登录
echo -e "${YELLOW}检查CloudBase登录状态...${NC}"
LOGIN_STATUS=$(tcb login:check)
if [[ $LOGIN_STATUS == *"未登录"* ]]; then
    echo -e "${YELLOW}请先登录CloudBase:${NC}"
    tcb login
fi

# 获取环境ID
ENV_ID=$(tcb env:list -p | grep "默认环境" | awk '{print $1}')
if [ -z "$ENV_ID" ]; then
    echo -e "${RED}错误: 无法获取环境ID${NC}"
    echo "请确保已创建CloudBase环境并设置为默认环境"
    exit 1
fi

echo -e "${GREEN}使用环境ID: $ENV_ID${NC}"

# 部署云函数
deploy_functions() {
    echo -e "${YELLOW}开始部署云函数...${NC}"
    
    # 遍历cloudfunctions目录下的所有函数
    for func_dir in cloudfunctions/*/; do
        func_name=$(basename "$func_dir")
        
        # 跳过非函数目录
        if [ "$func_name" == "database" ] || [ "$func_name" == "test" ]; then
            continue
        fi
        
        echo -e "${YELLOW}部署云函数: $func_name${NC}"
        
        # 安装依赖
        echo "安装依赖..."
        (cd "$func_dir" && npm install --production)
        
        # 部署函数
        echo "部署函数..."
        tcb fn deploy "$func_name" --force
        
        if [ $? -eq 0 ]; then
            echo -e "${GREEN}云函数 $func_name 部署成功${NC}"
        else
            echo -e "${RED}云函数 $func_name 部署失败${NC}"
            exit 1
        fi
    done
    
    echo -e "${GREEN}所有云函数部署完成${NC}"
}

# 创建数据库索引
create_indexes() {
    echo -e "${YELLOW}开始创建数据库索引...${NC}"
    
    # 检查索引配置文件是否存在
    if [ ! -f "cloudfunctions/database/indexes.json" ]; then
        echo -e "${RED}错误: 索引配置文件不存在${NC}"
        exit 1
    fi
    
    # 读取索引配置
    INDEXES=$(cat cloudfunctions/database/indexes.json)
    
    # 获取所有集合名称
    COLLECTIONS=$(echo $INDEXES | jq 'keys[]' -r)
    
    # 遍历集合创建索引
    for collection in $COLLECTIONS; do
        echo -e "${YELLOW}为集合 $collection 创建索引${NC}"
        
        # 获取该集合的所有索引
        INDEX_COUNT=$(echo $INDEXES | jq ".$collection | length")
        
        for (( i=0; i<$INDEX_COUNT; i++ )); do
            # 获取索引名称
            INDEX_NAME=$(echo $INDEXES | jq -r ".$collection[$i].name")
            
            # 获取索引键
            INDEX_KEYS=$(echo $INDEXES | jq -r ".$collection[$i].keys")
            
            echo "创建索引: $INDEX_NAME"
            
            # 创建索引
            tcb db:index create "$collection" "$INDEX_NAME" "$INDEX_KEYS"
            
            if [ $? -eq 0 ]; then
                echo -e "${GREEN}索引 $INDEX_NAME 创建成功${NC}"
            else
                echo -e "${YELLOW}索引 $INDEX_NAME 可能已存在，跳过${NC}"
            fi
        done
    done
    
    echo -e "${GREEN}所有数据库索引创建完成${NC}"
}

# 部署静态网站
deploy_website() {
    echo -e "${YELLOW}开始部署静态网站...${NC}"
    
    # 构建项目
    echo "构建项目..."
    npm run build
    
    if [ $? -ne 0 ]; then
        echo -e "${RED}项目构建失败${NC}"
        exit 1
    fi
    
    # 部署静态资源
    echo "部署静态资源..."
    tcb hosting:deploy ./dist -e "$ENV_ID"
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}静态网站部署成功${NC}"
    else
        echo -e "${RED}静态网站部署失败${NC}"
        exit 1
    fi
}

# 主函数
main() {
    echo -e "${GREEN}===== 艺术画廊项目部署开始 =====${NC}"
    
    # 部署云函数
    deploy_functions
    
    # 创建数据库索引
    create_indexes
    
    # 部署静态网站
    deploy_website
    
    echo -e "${GREEN}===== 艺术画廊项目部署完成 =====${NC}"
    
    # 获取静态网站访问地址
    WEBSITE_URL=$(tcb hosting:detail -e "$ENV_ID" | grep -o 'https://.*\.tcloudbaseapp\.com')
    
    echo -e "${GREEN}静态网站访问地址: $WEBSITE_URL${NC}"
}

# 执行主函数
main